<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:m="livcos.org/ns/mind"
  xmlns:f="livcos.org/ns/xslt/function"
  exclude-result-prefixes="f m">
  
  <xsl:import href="../../style/base.xsl"/>
  
  <xsl:output method="text"/>

  <xsl:param name="ref" select="'MindNavi'"/>
  
  <xsl:template match="/">
    <xsl:variable name="data">
      <xsl:apply-templates select="document(concat($ref,'.content'))/*" mode="prep">
        <xsl:with-param name="level" select="0"/>
        <xsl:with-param name="base" select="$ref"/>
      </xsl:apply-templates>
    </xsl:variable>
    <xsl:apply-templates select="$data/*"/>
  </xsl:template>
  
  <xsl:template match="@* | node()" mode="prep">
    <xsl:param name="level"/>
    <xsl:param name="base"/>
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" mode="#current">
        <xsl:with-param name="level" select="$level"/>
        <xsl:with-param name="base" select="$base"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
  
  <xsl:template match="m:thought" mode="prep">
    <xsl:param name="level"/>
    <xsl:param name="base"/>
    <xsl:variable name="thgtId" select="f:object-id(.)"/>
    <xsl:copy>
      <xsl:attribute name="id">
        <xsl:value-of select="$thgtId"/>
      </xsl:attribute>
      <xsl:apply-templates select="@* | node()" mode="#current">
        <xsl:with-param name="level" select="$level"/>
        <xsl:with-param name="base" select="$thgtId"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
  
  <xsl:template match="m:rel" mode="prep">
    <xsl:param name="level"/>
    <xsl:param name="base"/>
    <xsl:if test="$level &lt; 3">
      <xsl:variable name="absId" select="resolve-uri(@ref, $base)"/>
      <xsl:variable name="relThgt" select="document(concat($absId,'.content'))/*"/>
      <xsl:copy>
        <xsl:apply-templates select="@* | node()" mode="#current"/>
        <xsl:apply-templates select="$relThgt" mode="#current">
          <xsl:with-param name="level" select="$level + 1"/>
          <xsl:with-param name="base" select="$absId"/>
        </xsl:apply-templates>
      </xsl:copy>
    </xsl:if>
  </xsl:template>
  
  <xsl:template match="m:thought">
    <xsl:text>{</xsl:text>
    <xsl:text>id:'</xsl:text>
    <xsl:value-of select="@id"/>
    <xsl:text>',label:'</xsl:text>
    <xsl:value-of select="m:label"/>
    <xsl:apply-templates select="m:note"/>
    <xsl:apply-templates select="m:link"/>
    <xsl:text>'</xsl:text>
    <xsl:if test="m:rel">
      <xsl:text>,rels:[</xsl:text>
      <xsl:apply-templates select="m:rel">
        <xsl:sort select="m:thought/m:label"/>
      </xsl:apply-templates>
      <xsl:text>]</xsl:text>
    </xsl:if>
    <xsl:text>}</xsl:text>
  </xsl:template>
  
  <xsl:template match="m:note">
    <xsl:text>',note:'</xsl:text>
    <xsl:value-of select="replace(replace(., '''', ''''''), '\n', ' ')"/>
  </xsl:template>
  
  <xsl:template match="m:link">
    <xsl:text>',link:'</xsl:text>
    <xsl:value-of select="replace(., '''', '''''')"/>
  </xsl:template>
  
  <xsl:template match="m:rel">
    <xsl:if test="position() > 1">,</xsl:if>
    <xsl:text>{id:'</xsl:text>
    <xsl:value-of select="@id"/>
    <xsl:text>',to:</xsl:text>
    <xsl:apply-templates select="m:thought"/>
    <xsl:text>}</xsl:text>
  </xsl:template>
  
</xsl:stylesheet>
